package Demo01;


public class Test {
    public static void main(String[] args) {
        int[] nums = new int[]{1, 2, 3, 4, 5};
        int[] arr=copyOf(nums);

    }

    //作业内容
    //实现一个方法 toString, 把一个整型数组转换成字符串. 例如数组 {1, 2, 3} , 返回的字符串为 "[1, 2, 3]", 注意 逗号 的位置和数量.
    public static void toString(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1)
                System.out.print(arr[i] + "]");
            else
                System.out.print(arr[i] + ",");
        }
    }

    //作业内容
    //实现一个方法 copyOf, 对一个整型数组进行拷贝, 得到一个新的数组.
    public static int[] copyOf(int[] arr) {
        int[] arrys = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            arrys[i] = arr[i];
        }
        return arrys;
    }

    //作业内容
    //给定一个有序整型数组, 实现二分查找
    public static int findNumber(int[] arr, int tofind, int left, int right) {
        int mid = (left + right) / 2;
        if (left > right) {
            return -1;
        }
        if (tofind == arr[mid]) {
            return mid;
        } else if (tofind > arr[mid]) {
            return findNumber(arr, tofind, mid + 1, right);
        } else {
            return findNumber(arr, tofind, left, mid - 1);
        }
    }

    //作业内容
    //给定一个整型数组, 判定数组是否有序（递增）
    public static boolean isSwaoed(int[] arr) {
        for (int j = 0; j < arr.length - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                return false;
            }
        }
        return true;
    }

    //作业内容
    //冒泡排序,升序[改良版]  加boolean变量
    public static int[] maoPao(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            boolean isSwaped = true;
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    isSwaped = false;
                }
            }
            if (isSwaped) {
                break;
            }
        }
        return arr;
    }

    //作业内容
    // 给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出 和为目标值 target 的那 两个 整数，并返回它们的数组下标。
    public static void findTarget(int[] arr, int target) {
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[i] + arr[j] == target) {
                    System.out.println("[" + i + "," + j + "]");
                    return;
                }
            }
        }
        System.out.println("无法找到");
    }

    //作业内容
    //给定一个非空整数数组，除了某个元素只出现一次以外，其余每个元素均出现两次。找出那个只出现了一次的元素。
    public static int findlest(int[] arr) {
        int num = arr[0];
        for (int i = 1; i < arr.length; i++) {
            num = num ^ arr[i];
        }
        return num;
    }

    //作业内容
    //给定一个大小为 n 的数组，找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
    public static int findMost(int[] arr) {
        int count = 1;
        int num = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (count > 0) {
                if (num == arr[i])
                    count++;
                else
                    count--;
            } else {
                num = arr[i];
                count = 1;
            }
        }
        return num;
    }

    //作业内容
    //给你一个整数数组 arr，请你判断数组中是否存在连续三个元素都是奇数的情况：如果存在，请返回 true ；否则，返回 false 。
    public static boolean isThreeOdd(int[] arr) {
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] % 2 == 1) {
                count++;
            } else {
                count = 0;
            }
            if (count == 3)
                return true;
        }
        return false;
    }

    //作业内容
    //创建一个 int 类型的数组, 元素个数为 100, 并把每个元素依次设置为 1 - 100
    public static int[] set(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            arr[i] = i + 1;
        }
        return arr;
    }

    //作业内容
    //实现一个方法 printArray, 以数组为参数, 循环访问数组中的每个元素, 打印每个元素的值.
    public static void printArray(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            if (i % 10 == 9) {
                System.out.println(arr[i]);
            } else {
                System.out.print(arr[i] + " ");
            }
        }
    }

    // 作业内容
    //实现一个方法 transform, 以数组为参数, 循环将数组中的每个元素 乘以 2 , 并设置到对应的数组元素上. 例如 原数组为 {1, 2, 3}, 修改之后为 {2, 4, 6}
    public static void transform(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i] * 2;
        }
    }

    //作业内容
    //实现一个方法 avg, 以数组为参数, 求数组中所有元素的平均值(注意方法的返回值类型).
    public static double avg(int[] arr) {
        double sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        return sum / arr.length;
    }

    // 作业内容
    //实现一个方法 sum, 以数组为参数, 求数组所有元素之和.
    public static int sum(int[] arr) {
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        return sum;
    }
}
